# -*- coding:UTF-8 -*-
"""
python100例
"""
class Cases:
    def __init_(self):
        print("python100例")

    def Case1(self):
        for x in range(1,5):
            for y in range(1,5):
                for z in range(1,5):
                    if x != y and x!=z and y != z :
                        print(x, y, z)


    def Case2(self):
        x = int(input('请输入金额reword：'))
        arr = [100,60,40,20,10,0]
        rat = [0.001,0.015,0.03,0.05,0.075,0.1,0]
        total = 0
        for i in range(0,6):
            if x > arr[i]:
               total += (x - arr[i])*rat[i]
               print((x - arr[i])*rat[i])
               x = arr[i]
        print(total)

    def Case3(self):
        for i in range(1, 85):
            if 168 % i == 0:
                j = 168/i
                if i > j and (i+j)%2==0 and (i-j)%2==0:
                    m = (i+j)/2
                    n = (i-j)/2
                    x = n * n - 100
                    print(x)

    def Case4(self):
        year = int(input('year:\n'))
        month = int(input('month:\n'))
        day = int(input('day:\n'))
        months = [0,31,59,90,120,151,181,212,243,273,304,334]
        if 0 < month <=12:
            sum = months[month-1]
        else:
            print('date error')
        sum += day
        if (year % 400 == 0) or ( (year % 4 == 0) and (year % 100 == 0) ):
            if month > 2 :
                sum += 1
        print(sum)

    def Case5(self):
        item = []
        for i in range(3):
            x = int(input('请输入：'))
            item.append(x)
        item.sort()
        print(item)

    def Case6(self):
        n = int(input('请输入：'))
        if n == 1 or n==2:
            return 1
        a, b = 1,1
        for i in range(n-1):
            a,b = b, a+b
            print(a)

    def fib(self, n):
        if n==1 or n==2:
            return 1
        return fib(n-1)+fib(n-2)





if __name__ == '__main__':
    cases = Cases()
    """
    题目：有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？
    程序分析：可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。
    """
#     case1 = cases.Case1()

    """
    题目：企业发放的奖金根据利润提成。利润(I)低于或等于10万元时，奖金可提10%；利润高于10万元，低于20万元时，低于10万元的部分按10%提成，高于10万元的部分，可提成7.5%；20万到40万之间时，高于20万元的部分，可提成5%；40万到60万之间时高于40万元的部分，可提成3%；
    60万到100万之间时，高于60万元的部分，可提成1.5%，高于100万元时，超过100万元的部分按1%提成，从键盘输入当月利润I，求应发放奖金总数？
    程序分析：请利用数轴来分界，定位。注意定义时需把奖金定义成长整型。
    """
#     case2 = cases.Case2()

    """
    题目：一个整数，它加上100后是一个完全平方数，再加上168又是一个完全平方数，请问该数是多少？
    程序分析：
    假设该数为 x。
    1、则：x + 100 = n2, x + 100 + 168 = m2
    2、计算等式：m2 - n2 = (m + n)(m - n) = 168
    3、设置： m + n = i，m - n = j，i * j =168，i 和 j 至少一个是偶数
    4、可得： m = (i + j) / 2， n = (i - j) / 2，i 和 j 要么都是偶数，要么都是奇数。
    5、从 3 和 4 推导可知道，i 与 j 均是大于等于 2 的偶数。
    6、由于 i * j = 168， j>=2，则 1 < i < 168 / 2 + 1。
    7、接下来将 i 的所有数字循环计算即可。
    """
#     case3 = cases.Case3()
    """
    题目：输入某年某月某日，判断这一天是这一年的第几天？

    程序分析：以3月5日为例，应该先把前两个月的加起来，然后再加上5天即本年的第几天，特殊情况，闰年且输入月份大于2时需考虑多加一天：
    """
#     case4 = cases.Case4()

    """
    题目：输入三个整数x,y,z，请把这三个数由小到大输出。

    程序分析：我们想办法把最小的数放到x上，先将x与y进行比较，如果x>y则将x与y的值进行交换，然后再用x与z进行比较，如果x>z则将x与z的值进行交换，这样能使x最小。
    """
#     case5 = cases.Case5()
    n = int(input('请输入：'))
    case7 = cases.fib(n)
    print(case7)

#     # 使用递归
#     def fib(n):
#         if n==1 or n==2:
#             return 1
#         return fib(n-1)+fib(n-2)
#
#     # 输出了第10个斐波那契数列
#     print fib(10)

